package com.xbongbong.paas.pojo.dto;

import com.xbongbong.paas.domain.entity.ext.OptionalRangeEntity;
import com.xbongbong.paas.field.FilterConditionsPoJo;
import com.xbongbong.paas.pojo.StageSavePojo;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.paas.toolbox.wrap.QueryIgnore;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * 阶段流程保存
 * @author 李少杰
 * @version v1.0.0
 * @date 2021/11/22 15:55
 */
@Getter
@Setter
@ToString
public class StageProcessSaveDTO extends BaseDTO {


    /**
     * 主键
     */
    private Long id;
    /**
     * 表单id
     */
    @NotNull(message = "{dto.msg.processEnable.formId.NotNull}")
    private Long formId;

    /**
     * saas标记
     */
    @DecimalMin(value = "1", message = "{dto.msg.processEnable.saasMark.DecimalMin}")
    @DecimalMax(value = "2", message = "{dto.msg.processEnable.saasMark.DecimalMax}")
    @NotNull(message = "{dto.msg.processEnable.saasMark.NotNull}")
    private Integer saasMark;
    /**
     * saas类型
     */
    private Integer businessType;
    /**
     * 流程类型
     */
    @DecimalMin(value = "1", message = "{dto.msg.processGet.type.DecimalMin}")
    @DecimalMax(value = "3", message = "{dto.msg.processGet.type.DecimalMax}")
    @NotNull(message = "{dto.msg.processGet.type.NotNull}")
    @Getter(onMethod_ = {@QueryIgnore})
    private Integer type;
    /**
     * 流程名称
     */
    @NotNull(message = "{dto.msg.processSave.name.NotNull}")
    private String name;
    /**
     * 阶段流程版本名称
     */
    @NotNull(message = "{dto.msg.processSave.versionName.NotNull}")
    private String versionName;
    /**
     * 阶段流程版本id
     */
    @NotNull(message = "{dto.msg.processSave.versionId.NotNull}")
    private Integer versionId;
    /**
     * 是否启用，1启用，0不启用
     */
    @NotNull(message = "{dto.msg.processSave.enable.NotNull}")
    private Integer enable;
    /**
     * 阶段停留单位【1时、2天、3周、4月】
     */
    private Integer stageUnit;
    /**
     * 允许回退阶段（0不允许、1允许）
     */
    private Integer allowBack;
    /**
     * 允许新建选择阶段（0不允许、1允许）
     */
    private Integer allowNewSelect;
    /**
     * 哪些人允许新建选择阶段，空值代表所有人都允许
     */
    private List<OptionalRangeEntity> allowNewSelectUser;
    /**
     * 阶段用时（0不显示、1显示）
     */
    private Integer showTimeUse;
    /**
     * 阶段停留时长（0不显示、1显示）
     */
    private Integer showTimeStay;
    /**
     * 任务完成情况（0不显示、1显示）
     */
    private Integer showWorkCompletion;
    /**
     * 公司平均完成时长（0不显示、1显示）
     */
    private Integer showAverageCompletionTime;
    /**
     * 触发条件
     */
    private List<FilterConditionsPoJo> triggerCondition;
    /**
     * 优先级字段，数值越小优先级越高
     */
    private Integer priority;
    /**
     * 阶段列表
     */
    @NotNull(message = "{dto.msg.processSave.stageList.NotNull}")
    private List<StageSavePojo> stageList;
}
